package com.hujie.sqlqueryes.service.util;

import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
import net.sf.jsqlparser.expression.DoubleValue;
import net.sf.jsqlparser.expression.StringValue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * SQL表达式处理工具类
 */
public class SqlExpressionUtil {
    
    private static final Logger logger = LoggerFactory.getLogger(SqlExpressionUtil.class);
    
    /**
     * 从表达式中获取值
     * @param expression 表达式
     * @return 值字符串
     */
    public static String getValueFromExpression(Expression expression) {
        logger.debug("处理表达式: {}", expression);
        if (expression instanceof StringValue) {
            String value = ((StringValue) expression).getValue();
            logger.debug("StringValue类型值: {}", value);
            return value;
        } else if (expression instanceof LongValue) {
            String value = String.valueOf(((LongValue) expression).getValue());
            logger.debug("LongValue类型值: {}", value);
            return value;
        } else if (expression instanceof DoubleValue) {
            String value = String.valueOf(((DoubleValue) expression).getValue());
            logger.debug("DoubleValue类型值: {}", value);
            return value;
        }
        String value = expression.toString();
        logger.debug("其他类型值: {}", value);
        // 特别处理字符串值，移除可能存在的引号
        if (value.startsWith("'") && value.endsWith("'") && value.length() > 1) {
            value = value.substring(1, value.length() - 1);
            logger.debug("移除引号后的值: {}", value);
        }
        return value;
    }
    
    /**
     * 判断字符串是否为数字
     * @param str 字符串
     * @return 是否为数字
     */
    public static boolean isNumeric(String str) {
        if (str == null || str.isEmpty()) {
            return false;
        }
        try {
            Double.parseDouble(str);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }
}